/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.dew.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import pe.edu.upc.dew.model.Horario;
import pe.edu.upc.dew.model.Instructor;
import pe.edu.upc.dew.model.Local;
import pe.edu.upc.dew.model.Servicio;
import pe.edu.upc.dew.service.ServiciosService;
import pe.edu.upc.dew.service.ServiciosServiceImpl;
import pe.edu.upc.dew.util.ConstantesGimnasio;
import pe.edu.upc.dew.util.Util;


/**
 *
 * @author Milagros
 */
public class ServiciosServlet extends HttpServlet {
    private ServiciosService servicioService;

    @Override
    public void init(ServletConfig config) throws ServletException {
        ApplicationContext context = 
            WebApplicationContextUtils.getWebApplicationContext(
                config.getServletContext());
        this.servicioService = context.getBean("servicioService", ServiciosService.class);
        
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            String accion = request.getParameter("accion");
             if(ConstantesGimnasio.ACCION_REGISTRAR.equals(accion)){
             // se obtiene el servicio de la interfaz del usuario
                 Local localServicio = obtenerServicioDePantalla(request);

               
                //se envia a registrar
                int resp = servicioService.registrarServicio(localServicio);
                if(resp > 0){

                //obteniendo la lista de Locales-servicios del contexto
                //List <Servicio> servicios = (List <Servicio>)request.getSession().getServletContext().getAttribute(ConstantesGimnasio.LISTA_SERVICIOS_CONTEXTO);
                List <Local> localesCont = (List <Local>)request.getSession(false).getServletContext().getAttribute(ConstantesGimnasio.LISTA_LOCALES_CONTEXTO);
                int indice = 0;
                // agregando a la lista
                for (Iterator<Local> it = localesCont.iterator(); it.hasNext();) {
                     Local local = it.next();
                     if(local.getCodigo() == localServicio.getCodigo()){
                         if(local.getServicio() == null){
                             local.setServicio(new ArrayList<Servicio>());
                         }
                         indice = local.getServicio().size();
                         //Asignamos el codigo del nuevo Servicio
                         localServicio.getServicio().get(0).setCodigo(resp);
                        local.getServicio().add(localServicio.getServicio().get(0));
                         //break;
                     }
                }
                // subiendo al contexto
                request.getSession(false).getServletContext().setAttribute(ConstantesGimnasio.LISTA_LOCALES_CONTEXTO,localesCont);

                mostrarMensaje(ConstantesGimnasio.MENSAJE_REGISTRO_EXITOSO,request);
                }else{
                    mostrarMensaje(ConstantesGimnasio.MENSAJE_REGISTRO_ERROR,request);

                }

             }else if(ConstantesGimnasio.ACCION_ACTUALIZAR.equals(accion)){

             }

        }catch(NumberFormatException nfex){
            mostrarMensaje(ConstantesGimnasio.MENSAJE_ERROR_DATOS_OBLIGATORIOS,request);
        }
        request.getRequestDispatcher("Administrador/registroServicios.jsp").forward(request, response);
        }


    private Local obtenerServicioDePantalla(HttpServletRequest request){

            Servicio servicio = new Servicio();
            servicio.setDescripcion(String.format(Util.getDatoStringPantalla("txtDescripcion",request)));
            servicio.setCosto(Util.getDatoDoublePantalla("txtCosto",request));
            servicio.setLimiteMatriculados(Util.getDatoDoublePantalla("txtMatriculados",request).intValue());

            //Se obtienen los servicios seleccionados
            Local local = new Local();
            local.setCodigo(Util.getDatoDoublePantalla("cboLocales",request).intValue());
            //servicio.setInstructor(new Instructor());
            //servicio.getInstructor().setNombre(Util.getDatoStringPantalla("cboInstructor",request));
             Instructor instructor = new Instructor();
             
             instructor.setCodigo(Util.getDatoDoublePantalla("cboInstructor", request).intValue());

            // se obtienen los checks de los dias
              servicio.setHorario(new ArrayList<Horario>());
              String Lun = request.getParameter("chLun");
              if (Lun != null){
                 Horario d1 = new Horario();
                 d1.setDia(ConstantesGimnasio.LUNES);
                 servicio.getHorario().add(d1);
              }
              String Mar = request.getParameter("chMar");
              if (Mar != null){
                 Horario d2 = new Horario();
                 d2.setDia(ConstantesGimnasio.MARTES);
                 servicio.getHorario().add(d2);
              }
              String Mier = request.getParameter("chMier");
              if (Mier != null){
                 Horario d3 = new Horario();
                 d3.setDia(ConstantesGimnasio.MIERCOLES);
                 servicio.getHorario().add(d3);
              }
              String Jue = request.getParameter("chJuev");
              if (Jue != null){
                 Horario d4 = new Horario();
                 d4.setDia(ConstantesGimnasio.JUEVES);
                 servicio.getHorario().add(d4);
              }
              String Vier = request.getParameter("chVier");
              if (Vier != null){
                 Horario d5 = new Horario();
                 d5.setDia(ConstantesGimnasio.VIERNES);
                 servicio.getHorario().add(d5);
              }
              String Sab = request.getParameter("chSab");
              if (Sab != null){
                 Horario d6 = new Horario();
                 d6.setDia(ConstantesGimnasio.SABADO);
                 servicio.getHorario().add(d6);
              }
              String Dom = request.getParameter("chDomin");
              if (Dom != null){
                 Horario d7 = new Horario();
                 d7.setDia(ConstantesGimnasio.DOMINGO);
                 servicio.getHorario().add(d7);
              }
            //se obtiene la hora de inicio y fin
            servicio.setHoraInicio(Util.getDatoStringPantalla("cboHoraIni", request));
            servicio.setHoraFin(Util.getDatoStringPantalla("cboHoraFin", request));
            servicio.setmInstructor(instructor);
            local.setServicio(new ArrayList<Servicio>());
            local.getServicio().add(servicio);

            return local;
    }

    private void mostrarMensaje(String mensaje,HttpServletRequest req) {
        req.setAttribute(ConstantesGimnasio.MENSAJE_REQUEST,mensaje);
    }


    public void setServicioService(ServiciosService servicioService) {
        this.servicioService = servicioService;
    }
}
